home *** CD-ROM | disk | FTP | other *** search
/ com!online 2005 May / com_0505_1.iso / opensource / top10 / amc_install.exe / {app} / Scripts / Video Guide (RU).ifs < prev    next >
Encoding:
Text File  |  2004-03-20  |  14.3 KB  |  476 lines

  1. // GETINFO SCRIPTING
  2. // Imports russian movies info from VideoGuide
  3.  
  4. (***************************************************
  5.  *  Movie information import script for:           *
  6.  *    VideoGuide Russian,                          *
  7.  *    http://www.videoguide.ru/                    *
  8.  *                                                 *
  9.  *  (c) 2002 Yan Sorkin       ysorkin@mail.ru      *
  10.  *                                                 *
  11.  *  Last update:                                   *
  12.  *  - 22.10.2002                                   *
  13.  *                                                 *
  14.  *  Known issues:                                  *
  15.  *  - none                                         *
  16.  *                                                 *
  17.  *  For use with Ant Movie Catalog 3.4.0           *
  18.  *  www.antp.be/software/moviecatalog              *
  19.  *                                                 *
  20.  *  This program is free software; you can         *
  21.  *  redistribute it and/or modify it under the     *
  22.  *  terms of the GNU General Public License as     *
  23.  *  published by the Free Software Foundation;     *
  24.  *  either version 2 of the License, or (at your   *
  25.  *  option) any later version.                     *
  26.  ***************************************************)
  27.  
  28. program VideoGuide;
  29. const
  30.   BaseAddress = 'http://www.videoguide.ru/';
  31. //  BaseAddress = 'http://localhost/';
  32. var
  33.   MovieName: string;
  34.  
  35. function GetTextBlockFrom(Text: string; StartAt: string): string;
  36. var
  37.   TextBlock: string;
  38.   StartPos, EndPos: Integer;
  39. begin
  40.   TextBlock := Text;
  41.   StartPos := pos(StartAt, TextBlock);
  42.   if StartPos > 0 then
  43.   begin
  44.     Delete(TextBlock, 1, StartPos - 1);
  45.     result := TextBlock;
  46.   end;
  47. end;
  48.  
  49. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  50. var
  51.   i: Integer;
  52. begin
  53.   result := -1;
  54.   if StartAt < 0 then
  55.     StartAt := 0;
  56.   for i := StartAt to List.Count-1 do
  57.     if Pos(Pattern, List.GetString(i)) <> 0 then
  58.     begin
  59.       result := i;
  60.       Break;
  61.     end;
  62. end;
  63.  
  64. procedure AnalyzePage(Address: string);
  65. var
  66.   Page: TStringList;
  67.   LineNr: Integer;
  68.   Line: string;
  69.   TextBlock: string;
  70. begin
  71.   Page := TStringList.Create;
  72.   Page.Text := GetPage(Address);
  73.   if pos('<TITLE>┬ΦΣσε├ΦΣ(R) - ╧εΦ±Ω ⌠Φδⁿ∞α "', Page.Text) = 0 then
  74.   begin
  75.     SetField(fieldURL, Address);
  76.     if pos('<TITLE>┬ΦΣσε├ΦΣ(R) - ╨σδΦτ φα DVD', Page.Text) > 0 then
  77.     begin
  78.         AnalyzeVideoPage(Page);
  79.     end else
  80.     if pos('<TITLE>┬ΦΣσε├ΦΣ(R) - ╨σδΦτ φα ΓΦΣσε', Page.Text) > 0 then
  81.     begin
  82.         AnalyzeVideoPage(Page);
  83.     end else
  84.     begin
  85.         AnalyzeMoviePage(Page);
  86.     end;
  87.   end else
  88.   if pos('ReDirect("', Page.Text) > 0 then
  89.   begin
  90.     AnalyzeRedirectPage(Page);
  91.   end else
  92.   begin
  93.     PickTreeClear;
  94.     LineNr := FindLine('┬±σπε φαΘΣσφε ⌠Φδⁿ∞εΓ Γ ε±φεΓφεΘ ßατσ', Page, 0);
  95.     if LineNr > -1 then
  96.     begin
  97.       PickTreeAdd('Movies', '');
  98.       AddMoviesTitles(Page, LineNr);
  99.     end;
  100.     TextBlock := GetTextBlockFrom(Page.Text, '┬±σπε φαΘΣσφε ⌠Φδⁿ∞εΓ Γ ßατσ ΓΦΣσε≡σδΦτεΓ');
  101.     if Length(TextBlock) > 0 then
  102.     begin
  103.       PickTreeAdd('Released on video', '');
  104.       AddReleasesTitles(TextBlock);
  105.     end;
  106.     TextBlock := GetTextBlockFrom(Page.Text, '┬±σπε φαΘΣσφε ⌠Φδⁿ∞εΓ Γ ßατσ ≡σδΦτεΓ DVD');
  107.     if Length(TextBlock) > 0 then
  108.     begin
  109.       PickTreeAdd('Released on DVD', '');
  110.       AddReleasesTitles(TextBlock);
  111.     end;
  112.     LineNr := FindLine('╤∞. ≥αΩµσ:</b> ε±≥αΓ°Φσ±  <a href="', Page, LineNr);
  113.     if LineNr > -1 then
  114.     begin
  115.       AddFindMoreLink(Page, LineNr);
  116.     end;
  117.     if PickTreeExec(Address) then
  118.       AnalyzePage(Address);
  119.   end;
  120.   Page.Free;
  121. end;
  122.  
  123. procedure AnalyzeMoviePage(Page: TStringList);
  124. var
  125.   Line, Value, Value2, FullValue: string;
  126.   LineNr, MovieLength: Integer;
  127.   BeginPos, EndPos: Integer;
  128. begin
  129.  
  130.   // Original Title & Year
  131.   LineNr := FindLine('<TITLE>', Page, 0);
  132.   Line := Page.GetString(LineNr);
  133.   if LineNr > -1 then
  134.   begin
  135.     BeginPos := pos('<TITLE>┬ΦΣσε├ΦΣ(R) - ', Line);
  136.     if BeginPos > 0 then
  137.       BeginPos := BeginPos + 21;
  138.     EndPos := pos(' (', Line);
  139.     if EndPos = 0 then
  140.       EndPos := Length(Line);
  141.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  142.     HTMLDecode(Value);
  143.     Value := AnsiLowerCase(Value);
  144.     Value := AnsiUpFirstLetter(Value);
  145.     SetField(fieldOriginalTitle, Value);
  146.     BeginPos := pos(' ', Line) + 6;
  147.     if BeginPos > 0 then
  148.     begin
  149.       EndPos := Length(Line);
  150.       Value := copy(Line, BeginPos, EndPos - BeginPos);
  151.       BeginPos := pos('(', Value) + 1;
  152.       EndPos := pos(')', Value);
  153.       if (BeginPos > 0) and (EndPos > 0) then
  154.       begin
  155.         FullValue := copy(Value, BeginPos, EndPos - BeginPos);
  156.         SetField(fieldYear, FullValue);
  157.       end;
  158.     end;
  159.   end;
  160.  
  161.   // Director
  162.   LineNr := FindLine('╨σµΦ±±σ≡:', Page, 0);
  163.   if LineNr > -1 then
  164.   begin
  165.     Value := '';
  166.     Line := Page.GetString(LineNr);
  167.     BeginPos := pos('</B> ', Line) + 5;
  168.     EndPos := Length(Line);
  169.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  170.     HTMLDecode(Value);
  171.     HTMLRemoveTags(Value);
  172.     SetField(fieldDirector, Value);
  173.   end;
  174.  
  175.   // Actors
  176.   LineNr := FindLine('┬ ≡εδ ⌡:', Page, 0);
  177.   if LineNr > -1 then
  178.   begin
  179.     Value := '';
  180.     Line := Page.GetString(LineNr);
  181.     BeginPos := pos('</B> ', Line) + 5;
  182.     EndPos := Length(Line);
  183.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  184.     HTMLDecode(Value);
  185.     HTMLRemoveTags(Value);
  186.     SetField(fieldActors, Value);
  187.   end;
  188.  
  189.   //Country
  190.   LineNr := FindLine('<br><I>', Page, 0);
  191.   if LineNr > -1 then
  192.   begin
  193.     Line := Page.GetString(LineNr);
  194.     BeginPos := pos('<br><I>', Line) + 7;
  195.     EndPos := pos(' ', Line);
  196.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  197.     HTMLDecode(Value);
  198.     SetField(fieldCountry, Value);
  199.   end;
  200.  
  201.   //Category
  202.   LineNr := FindLine('IdGenre=', Page, 0);
  203.   if LineNr > -1 then
  204.   begin
  205.     Line := Page.GetString(LineNr);
  206.     BeginPos := pos('">', Line) + 2;
  207.     EndPos := pos('</a>', Line);
  208.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  209.     HTMLDecode(Value);
  210.     SetField(fieldCategory, Value);
  211.   end;
  212.  
  213.   //Year and Length - LineNr is from the previous search
  214.   if LineNr > -1 then
  215.   begin
  216.     Line := Page.GetString(LineNr + 2);
  217.     BeginPos := 1;
  218.     EndPos := pos('; ', Line);
  219.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  220.     HTMLRemoveTags(Value);
  221.     SetField(fieldYear, Value);
  222.     
  223.     BeginPos := pos('; ', Line) + 7;
  224.     EndPos := Length(Line);
  225.     Line := copy(Line, BeginPos, EndPos - BeginPos);
  226.     BeginPos := 1;
  227.     EndPos := pos(',', Line);
  228.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  229.     MovieLength := StrToInt(Value, 0) * 60;
  230.     BeginPos := EndPos + 1;
  231.     EndPos := pos(';&', Line);
  232.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  233.     MovieLength := MovieLength + StrToInt(Value, 0);
  234.     if MovieLength > 0 then
  235.       SetField(fieldLength, IntToStr(MovieLength));
  236.   end;
  237.  
  238.   //Description
  239.   Value2 := '<p align="JUSTIFY">';
  240.   LineNr := FindLine( Value2, Page, 0);
  241.   if LineNr = -1 then
  242.   begin
  243.     Value2 := '<p align=justify>';
  244.     LineNr := FindLine(Value2, Page, 0);
  245.   end;
  246.   if LineNr > -1 then
  247.   begin
  248.     Line := Page.GetString(LineNr);
  249.     BeginPos := pos(Value2, Line) + Length(Value2);
  250.     EndPos := Length(Line);
  251.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  252.     HTMLDecode(Value);
  253.     Value := StringReplace(Value, '<br>', #13#10);
  254.     Value := StringReplace(Value, '<BR>', #13#10);
  255.     Value := StringReplace(Value, '<p', #13#10#13#10 + '<p');
  256.     HTMLRemoveTags(Value);
  257.     SetField(fieldDescription, Value);
  258.   end;
  259.  
  260.   DisplayResults;
  261. end;
  262.  
  263. procedure AnalyzeVideoPage(Page: TStringList);
  264. var
  265.   Line, Value, Value2, FullValue: string;
  266.   LineNr, MovieLength: Integer;
  267.   BeginPos, EndPos: Integer;
  268. begin
  269.  
  270.   // Title, Original Title, Country, Year, Length, Category
  271.   LineNr := FindLine('<p><b><a href="card_film.asp?IDFilm=', Page, 0);
  272.   if LineNr = -1 then
  273.     LineNr := FindLine('<p><b><font color="Navy">', Page, 0);
  274.   if LineNr > -1 then
  275.   begin
  276.     Line := Page.GetString(LineNr);
  277.     // Title
  278.     BeginPos := pos('">', Line) + 2;
  279.     EndPos := pos('</b>', Line);
  280.     if EndPos = 0 then
  281.       EndPos := Length(Line);
  282.     FullValue := copy(Line, BeginPos, EndPos - BeginPos);
  283.     HTMLDecode(FullValue);
  284.     HTMLRemoveTags(FullValue);
  285.     FullValue := AnsiLowerCase(FullValue);
  286.     FullValue := AnsiUpFirstLetter(FullValue);
  287.     SetField(fieldOriginalTitle, FullValue);
  288.  
  289.     // Original Title (if exists)
  290.     BeginPos := pos('<br><small>/', Line) + 12;
  291.     EndPos := pos('/  ', Line);
  292.     if (BeginPos > 0) and (EndPos > 0) then
  293.     begin
  294.       Value := copy(Line, BeginPos, EndPos - BeginPos);
  295.       HTMLDecode(Value);
  296.       HTMLRemoveTags(Value);
  297.       Value := AnsiLowerCase(Value);
  298.       Value := AnsiMixedCase(Value, ' .-');
  299.       SetField(fieldOriginalTitle, Value);
  300.       SetField(fieldTranslatedTitle, FullValue);
  301.       Delete(Line, 1, EndPos + 7);
  302.     end;
  303.     
  304.     // Country
  305.     BeginPos := pos('<br><small>', Line);
  306.     if BeginPos = 0 then
  307.       BeginPos := 1;
  308.     EndPos := pos('  ', Line);
  309.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  310.     HTMLDecode(Value);
  311.     HTMLRemoveTags(Value);
  312.     SetField(fieldCountry, Value);
  313.     Delete(Line, 1, EndPos + 6);
  314.  
  315.     // Year and Length
  316.     BeginPos := 1;
  317.     EndPos := pos('  ', Line);
  318.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  319.     SetField(fieldYear, Value);
  320.     
  321.     BeginPos := pos('  ', Line) + 7;
  322.     EndPos := pos(' ∞Φφ', Line);
  323.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  324.     SetField(fieldLength, Value);
  325.   end;
  326.  
  327.   //Category
  328.   LineNr := FindLine('</small><br>', Page, 0);
  329.   if LineNr > -1 then
  330.   begin
  331.     Line := Page.GetString(LineNr);
  332.     BeginPos := pos('</small><br>', Line) + 12;
  333.     EndPos := Length(Line) + 1;
  334.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  335.     HTMLDecode(Value);
  336.     SetField(fieldCategory, Value);
  337.   end;
  338.  
  339.   // Director
  340.   LineNr := FindLine('╨σµΦ±±σ≡:', Page, 0);
  341.   if LineNr > -1 then
  342.   begin
  343.     Line := Page.GetString(LineNr);
  344.     BeginPos := pos('</b> ', Line) + 5;
  345.     EndPos := Length(Line) + 1;
  346.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  347.     HTMLDecode(Value);
  348.     HTMLRemoveTags(Value);
  349.     SetField(fieldDirector, Value);
  350.   end;
  351.  
  352.   // Actors
  353.   LineNr := FindLine('<BR><b>┬ ≡εδ ⌡:</b>', Page, 0);
  354.   if LineNr > -1 then
  355.   begin
  356.     Line := Page.GetString(LineNr);
  357.     BeginPos := pos('</b>  ', Line) + 6;
  358.     EndPos := Length(Line);
  359.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  360.     HTMLDecode(Value);
  361.     HTMLRemoveTags(Value);
  362.     SetField(fieldActors, Value);
  363.   end;
  364.  
  365.   //Description
  366.   LineNr := FindLine('<p align="JUSTIFY">', Page, 0);
  367.   if LineNr > -1 then
  368.   begin
  369.     Line := Page.GetString(LineNr);
  370.     BeginPos := pos('<p align="JUSTIFY">', Line) + 19;
  371.     EndPos := Length(Line);
  372.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  373.     HTMLDecode(Value);
  374.     Value := StringReplace(Value, '<br>', #13#10);
  375.     Value := StringReplace(Value, '<BR>', #13#10);
  376.     Value := StringReplace(Value, '<p', #13#10#13#10 + '<p');
  377.     HTMLRemoveTags(Value);
  378.     SetField(fieldDescription, Value);
  379.   end;
  380.  
  381.   DisplayResults;
  382. end;
  383.  
  384. procedure AnalyzeRedirectPage(Page: TStringList);
  385. var
  386.   Address: string;
  387.   BeginPos, EndPos: Integer;
  388. begin
  389.   BeginPos := pos('ReDirect("', Page.Text) + 10;
  390.   EndPos := pos('")</script>', Page.Text);
  391.   Address := BaseAddress + copy(Page.Text, BeginPos, EndPos - BeginPos);
  392.   AnalyzePage(Address);
  393. end;
  394.  
  395. procedure AddFindMoreLink(Page: TStringList; var LineNr: Integer);
  396. var
  397.   Line, Value, Address: string;
  398.   StartPos, EndPos: Integer;
  399. begin
  400.   Line := Page.GetString(LineNr);
  401.   StartPos := pos('╤∞. ≥αΩµσ:</b> ε±≥αΓ°Φσ±  <a href="', Line) + 35;
  402.   EndPos := pos('</a> ⌠Φδⁿ∞', Line);
  403.   Value := copy(Line, StartPos, EndPos - StartPos);
  404.   StartPos := 1;
  405.   EndPos := pos('">', Value);
  406.   Address := BaseAddress + copy(Value, StartPos, EndPos - StartPos);
  407.   PickTreeMoreLink(Address);
  408. end;
  409.  
  410. procedure AddMoviesTitles(Page: TStringList; var LineNr: Integer);
  411. var
  412.   Line: string;
  413.   MovieTitle, MovieAddress: string;
  414.   StartPos, EndPos: Integer;
  415. begin
  416.   repeat
  417.     LineNr := LineNr + 1;
  418.     Line := Page.GetString(LineNr);
  419.     StartPos := pos('="', Line);
  420.     EndPos := pos('</OL>', Line);
  421.     if (StartPos > 0) and (EndPos = 0) then
  422.     begin
  423.       StartPos := StartPos + 2;
  424.       MovieAddress := copy(Line, StartPos, pos('">', Line) - StartPos);
  425.       StartPos := pos('">', Line) + 2;
  426.       MovieTitle := copy(Line, StartPos, pos('</a>', Line) - StartPos);
  427.       Line := Page.GetString(LineNr + 1);
  428.       MovieTitle := MovieTitle + copy(Line, 1, pos('</small>', Line) - 1);
  429.       HTMLDecode(Movietitle);
  430.       HTMLRemoveTags(MovieTitle);
  431.       PickTreeAdd(MovieTitle, BaseAddress + MovieAddress);
  432.     end;
  433.   until EndPos > 0;
  434. end;
  435.  
  436. procedure AddReleasesTitles(TextBlock: string);
  437. var
  438.   MovieTitle, MovieAddress: string;
  439.   StartPos, EndPos, EndTablePos: Integer;
  440. begin
  441.   repeat
  442.     StartPos := pos('<td><b><a href="', TextBlock);
  443.     EndTablePos :=  pos('</table>', TextBlock);
  444.     if StartPos > 0 then
  445.     begin
  446.       Delete(TextBlock, 1, StartPos - 1);
  447.     end;
  448.     if (StartPos > 0) and (StartPos < EndTablePos) then
  449.     begin
  450.       EndPos := pos('</td>', TextBlock);
  451.       MovieTitle := copy(TextBlock, 1, EndPos - 1);
  452.       HTMLDecode(MovieTitle);
  453.       HTMLRemoveTags(MovieTitle);
  454.       MovieAddress := copy(TextBlock, 17, pos('">', TextBlock) - 17);
  455.       PickTreeAdd(MovieTitle, BaseAddress + MovieAddress);
  456.       Delete(TextBlock, 1, EndPos - 1);
  457.     end;
  458.   until (StartPos = 0) or (StartPos > EndTablePos);
  459. end;
  460.  
  461. begin
  462.   if CheckVersion(3,4,0) then
  463.   begin
  464.     MovieName := GetField(fieldOriginalTitle);
  465.     if MovieName = '' then
  466.       MovieName := GetField(fieldTranslatedTitle);
  467.     if Input('Import from VideoGuide', 'Enter the title of the movie:', MovieName) then
  468.     begin
  469.       AnalyzePage('http://www.videoguide.ru/find.asp?Search=Simple&types=film&titles='+UrlEncode(MovieName));
  470. //      AnalyzePage('http://localhost/search1.htm');
  471.     end;
  472.   end else
  473.     ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.4.0)');
  474. end.
  475.  
  476.